'use strict';

/**
 * ProductSku 控制器
 *
 * API接口说明：
 *
 * 1. 生成SKU组合
 * POST /api/productSku/generate
 * 请求体: { product_id: number }
 * 响应: {
 *   totalCombinations: number,    // 总组合数
 *   existingCount: number,        // 已存在数量
 *   newCount: number,            // 新组合数量
 *   createdCount: number,        // 实际创建数量
 *   combinations: array,         // 新组合列表
 *   message: string              // 结果消息
 * }
 *
 * 2. 检查SKU是否存在
 * POST /api/productSku/check
 * 请求体: {
 *   product_id: number,
 *   spec_combination: string     // JSON格式的规格组合
 * }
 * 响应: { exists: boolean }
 *
 * 3. 批量创建SKU
 * POST /api/productSku/batch
 * 请求体: {
 *   skuList: array               // SKU数据数组
 * }
 * 响应: {
 *   success: array,              // 成功创建的SKU
 *   failed: array,               // 失败的SKU及原因
 *   total: number,               // 总数
 *   successCount: number,        // 成功数量
 *   failedCount: number          // 失败数量
 * }
 */

const BaseController = require('../base');

class ProductSkuController extends BaseController {
  static get serviceName() {
    return 'business.productSku';
  }

  /**
   * 生成SKU组合
   * 根据商品规格自动生成所有SKU组合
   */
  async generateSkuCombinations() {
    const { ctx } = this;
    const { product_id } = ctx.request.body;

    if (!product_id) {
      ctx.error(400, '商品ID不能为空');
      return;
    }

    try {
      const result = await this.service.generateSkuCombinations(product_id);
      ctx.success(result);
    } catch (error) {
      console.log(error)
      ctx.error(500, error.message || '生成SKU组合失败');
    }
  }

  /**
   * 检查SKU是否存在
   * 根据product_id和spec_combination检查SKU是否已存在
   */
  async checkSkuExists() {
    const { ctx } = this;
    const { product_id, spec_combination } = ctx.request.body;

    if (!product_id || !spec_combination) {
      ctx.error(400, '商品ID和规格组合不能为空');
      return;
    }

    try {
      const exists = await this.service.checkSkuExists(product_id, spec_combination);
      ctx.success({ exists });
    } catch (error) {
      ctx.error(500, error.message || '检查SKU失败');
    }
  }

  /**
   * 批量创建SKU
   * 支持批量创建多个SKU，并检查重复性
   */
  async batchCreate() {
    const { ctx } = this;
    const { skuList } = ctx.request.body;

    if (!skuList || !Array.isArray(skuList) || skuList.length === 0) {
      ctx.error(400, 'SKU列表不能为空');
      return;
    }

    try {
      const result = await this.service.batchCreate(skuList);
      ctx.success(result);
    } catch (error) {
      ctx.error(500, error.message || '批量创建SKU失败');
    }
  }
}

module.exports = ProductSkuController;
